package com.f21.f21assessoria.model.ergonometria;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Transient;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import com.f21.f21assessoria.model.Operadores.Comparador;
import com.f21.f21assessoria.model.Operadores.ComparadorInteiro;
import com.f21.f21assessoria.model.Operadores.Comparavel;

@Entity
public class Treino implements Serializable, Comparavel<Integer> {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	private long id;

	private int pos;

	private String tipo;
	@Transient
	private Comparador comparador;

	@ManyToOne(fetch = FetchType.LAZY)
	private Treinamento treinamento;

	@ElementCollection(fetch = FetchType.LAZY)
	private List<String> diasSemana;

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "treino", cascade = CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
	private List<AgrupamentoAtividade> agrupamentoAtividade;

	public Treino() {
		this.agrupamentoAtividade = new ArrayList<>();
		
		this.comparador =  new ComparadorInteiro() ;
	}

	public long getId() {
		return id;
	}

	public String getTipo() {
		return tipo;
	}

	public List<String> getDiasSemana() {
		return diasSemana;
	}

	public List<AgrupamentoAtividade> getAgrupamentoAtividade() {
		return agrupamentoAtividade;
	}

	public void setId(long id) {
		this.id = id;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public void setDiasSemana(List<String> diasSemana) {
		this.diasSemana = diasSemana;
	}

	public void setAgrupamentoAtividade(
			List<AgrupamentoAtividade> agrupamentoAtividade) {
		this.agrupamentoAtividade = agrupamentoAtividade;
	}

	public void addAgrupamentoAtividade(
			AgrupamentoAtividade agrupamentoAtividade) {
		agrupamentoAtividade.setTreino(this);
		this.agrupamentoAtividade.add(agrupamentoAtividade);
	}

	public Treinamento getTreinamento() {
		return treinamento;
	}

	public void setTreinamento(Treinamento treinamento) {
		this.treinamento = treinamento;
	}

	public String diasDaSemana() {
		return "Seunga, Quinta";
	}

	public Comparador getComparador() {
		return this.comparador;
	}

	public Integer getIdentificador() {
		return getPos();
	}

	@Override
	public int compareTo(Comparavel o) {
		return getComparador().comparar(this, o);
	}

	@Override
	public void setComparador(Comparador c) {
		this.comparador = c;
	}

	public int getPos() {
		return pos;
	}

	public void setPos(int pos) {
		this.pos = pos;
	}
}
